package shape

import (
	"errors"
	"fmt"
	"math"
)

// Circle 圆形结构体
type Circle struct {
	radius float64 // 半径
}

// NewCircle 创建一个圆实例
func NewCircle(radius float64) (*Circle, error) {
	if radius <= 0 {
		return nil, errors.New("半径必须大于0")
	}

	return &Circle{radius: radius}, nil
}

// String 方法将 Circle 对象转换为字符串表示形式。
func (circle *Circle) String() string {
	return fmt.Sprintf("Circle: {radius: %v, area: %v}", circle.radius, circle.Area())
}

// Radius 方法返回圆对象的半径。
func (circle *Circle) Radius() float64 {
	return circle.radius
}

// SetRadius 设置圆的半径
func (circle *Circle) SetRadius(radius float64) {
	circle.radius = radius // 更新圆的半径
}

// Area 计算圆的面积
func (circle *Circle) Area() float64 {
	// Π * r^2
	return math.Pi * math.Pow(circle.radius, 2)
}
